//这个头文件的设计目的是为了提供一组可以在多个 CPU 指令中重用的模板，通过根据操作数据的大小（如 1 字节、2 字节或 4 字节）来调整操作方式。这样可以避免代码冗余，使同一逻辑能够基于单一代码模板应用于不同的数据大小。

#include "cpu/exec/helper.h"

#if DATA_BYTE == 1//这段代码的意思是说,如果数据的字节数（DATA_BYTE）是1,就把后缀（SUFFIX）定义为b,无符号数据类型定义（DATA_TYPE）为uint8_t（uint8_t是一个由原有数据类型unsigned char通过typedef重名名的数据类型，u表示unsigned,8表示8位，_t表示由typedef定义），有符号数据类型（DATA_TYPE_S）定义为int8_t

#define SUFFIX b
#define DATA_TYPE uint8_t
#define DATA_TYPE_S int8_t

#elif DATA_BYTE == 2

#define SUFFIX w
#define DATA_TYPE uint16_t
#define DATA_TYPE_S int16_t

#elif DATA_BYTE == 4

#define SUFFIX l
#define DATA_TYPE uint32_t
#define DATA_TYPE_S int32_t

#else

#error unknown DATA_BYTE

#endif

#define REG(index) concat(reg_, SUFFIX) (index)
#define REG_NAME(index) concat(regs, SUFFIX) [index]

#define MEM_R(addr) swaddr_read(addr, DATA_BYTE)
#define MEM_W(addr, data) swaddr_write(addr, DATA_BYTE, data)

#define OPERAND_W(op, src) concat(write_operand_, SUFFIX) (op, src)

#define MSB(n) ((DATA_TYPE)(n) >> ((DATA_BYTE << 3) - 1))
